<?php

class Default_UserController extends Zend_Controller_Action {

    public function init() {
        /* Initialize action controller here */
        Zend_Auth::getInstance()->clearIdentity();
    }

    public function preDispatch() {
        if (Zend_Auth::getInstance()->hasIdentity()) {
            if ('logout' != $this->getRequest()->getActionName()) {
                $this->_helper->redirector('index', 'index');
            }
        } else {
            if ('logout' == $this->getRequest()->getActionName()) {
                $this->_helper->redirector('index');
            }
        }
    }

    public function indexAction() {

    }

    /**
     * Méthode du controlleur qui gère l'ajout d'un utilisateur dans la bdd
     *
     *
     *
     *
     */
    public function addAction() {
// on instancie le formulaire
        $form = new Default_Form_User();
// on ajoute une variable de vue contenant le formulaire
        $this->view->formUser = $form;

// si le formulaire a été soumis
        if ($this->_request->isPost()) {
// on récupère les variables Post
            $formData = $this->_request->getPost();
// si les critères de validation sont respectés
            if ($form->isValid($formData)) {
// on instancie un objet de bdd user
                $user = new Application_Model_DbTable_User();

// on récupère les différentes variables post soumises
                $firstname = $form->getValue('firstname');
                $lastname = $form->getValue('lastname');
                $email = $form->getValue('email');
                $password = md5($form->getValue('password'));
                $passwordBasic = $form->getValue('password');

//on utilisa la méthode add pour ajouter en base
                $user->add($firstname, $lastname, $email, $password);
//on nettoie les champs du formulaire .
                $form->reset();
// envoie du mail d'inscription
                $mailer = new Application_Model_Mailer('Bienvenue sur le BDE MIAGE Sorbonne', '', $email);
                $mailer->setBody(nl2br('

                Dear ' . $firstname . ', 
                Bienvenue sur le BDE MIAGE Sorbonne !!!
                
                Voici vos identifiants de connexion :
                - login : ' . $email . '
                - password : ' . $passwordBasic . '

                Please click on this url to visit our website: 
                ' . $this->view->baseUrl() . ';

                See you there, 
                The BDE MIAGE Sorbonne Team'));
                $mailer->send();

// on redirige vers la gestion des utilisateurs
                $this->_helper->redirector('index', 'user', 'default');
            }
        }
    }

    public function modifyAction() {
        try {
// on instancie le formulaire d'utilisateur
            $form = new Default_Form_User ( );
//on set l'id de l'utilisateur en récuperer l'id passée en paramètre dans l'url par la méthode get
            $form->setId($this->getRequest()->getParam('id'));
// on initialise le formulaire
            $form->init();
// on créer une nouvelle variable de vue avec le formulaire
            $this->view->formUserEdit = $form;
        } catch (Zend_Exception $e) {
            $this->view->msg = $e->getMessage();
        }
// si le formulaure a été soumis
        if ($this->_request->isPost()) {
// on récupère les variables post
            $formData = $this->_request->getPost();
// si la validation du formulaire est respectée
            if ($form->isValid($formData)) {
// on instancie un nouvel utilisateur
                $user = new Application_Model_DbTable_User( );
// on vérifie que les 2 mdp ne sont pas égaux, cad qu'il n'a pas été modifié
                if ($formData ['password'] == "") {
                    unset($formData ['password']);
                    unset($formData ['password2']);
                } else {
// sinon on chiffre en md5 le nouveau passeword
                    $formData ['password'] = md5($formData ['password']);
                    unset($formData ['password2']);
                }
                unset($formData ['submit']);

                $id = $this->getRequest()->getParam('id');
                $firstname = $form->getValue('firstname');
                $lastname = $form->getValue('lastname');
                $email = $form->getValue('email');
                $password = md5($form->getValue('password'));
                $result = $user->modify($id, $firstname, $lastname, $email, $password);

                $this->_helper->redirector('index', 'user', 'default');
            }
        }
    }

    public function deleteAction() {
        $id = $this->getRequest()->getParam('id');
        $user = new Application_Model_DbTable_User ( );
        $user->delete($id);
        $this->_helper->redirector('index', 'user', 'default');
    }

    public function loginAction() {
        //$this->_helper->layout->disableLayout();
        $form = new Default_Form_Login( );
        $this->view->formLogin = $form;

        if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                $email = $form->getValue('email');
                $password = $form->getValue('password');
                $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
                $authAdapter->setTableName('User')
                        ->setIdentityColumn('email')
                        ->setCredentialColumn('password')
                        ->setCredentialTreatment('md5(?)')
                        ->setIdentity($email)
                        ->setCredential($password);
                $authAuthenticate = $authAdapter->authenticate();

                $storage = Zend_Auth::getInstance()->getStorage();
                $storage->write($authAdapter->getResultRowObject($email));
                $storage->write($authAdapter->getResultRowObject(null, 'password'));
            }
        }
    }

    public function logoutAction() {
        //on nettoie les variable de session
        Zend_Auth::getInstance()->clearIdentity();
        // redirection sur la page d'acceuil
        $this->_helper->redirector->gotoSimple('index', 'index', 'default');
    }

}

